/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Haystack Software Inc. All rights reserved.
 *  Licensed under the PolyForm Strict License 1.0.0. See License.txt in the project root for
 *  license information.
 *--------------------------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See code-license.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
// @ts-check
"use strict"
;(function () {
  // @ts-ignore
  const vscode = acquireVsCodeApi()

  function getSettings() {
    const element = document.getElementById("settings")
    if (element) {
      const data = element.getAttribute("data-settings")
      if (data) {
        return JSON.parse(data)
      }
    }

    throw new Error(`Could not load settings`)
  }

  const settings = getSettings()

  // State
  let hasLoadedMedia = false

  // Elements
  const video = document.createElement("video")
  if (settings.src !== null) {
    video.src = settings.src
  }
  video.playsInline = true
  video.controls = true
  video.autoplay = settings.autoplay
  video.muted = settings.autoplay
  video.loop = settings.loop

  function onLoaded() {
    if (hasLoadedMedia) {
      return
    }
    hasLoadedMedia = true

    document.body.classList.remove("loading")
    document.body.classList.add("ready")
    document.body.append(video)
  }

  video.addEventListener("error", (e) => {
    if (hasLoadedMedia) {
      return
    }

    hasLoadedMedia = true
    document.body.classList.add("error")
    document.body.classList.remove("loading")
  })

  if (settings.src === null) {
    onLoaded()
  } else {
    video.addEventListener("canplaythrough", () => {
      onLoaded()
    })
  }

  document.querySelector(".open-file-link")?.addEventListener("click", (e) => {
    e.preventDefault()
    vscode.postMessage({
      type: "reopen-as-text",
    })
  })
})()
